// 静态属性 静态方法
class Person { 
  name: string
  // 若是存在构造函数里，这里赋值做默认值是没用的
  // name: string = '张三'
  age: number = 20
  static sex:string = '男'

  // 【1】原型.constructor === 构造函数
    // Person.constructor === Object.constructor
    // Person.constructor === Function.constructor


  // 默认值应该在这里赋值
  // constructor(name: string = '张三') {
  constructor(name: string) {
    // 构造函数.prototype === 原型
    this.name = name
  }
  // 实例方法-在Person函数对象的原型对象上的方法
  // Person.prototype.run
  run() {
    console.log(`${this.name}在运动`);
  }
  work(): void {
    console.log(`${this.name}在工作`);
    // return 'hello'
  }
  
  // 静态方法 - 在Person实例对象上的方法
  // Person.print
  static print() {
    // 类型“typeof Person”上不存在属性“name”。
    // this.name

    // 静态方法只能调用静态属性
    console.log(Person.sex);
  }
}

// console.log()  //true
// let p1 = new Person('张三');
let p1 = new Person('王五');
// 调用实例属性
console.log(p1.name, p1.age)  //王五 20

p1.work()  //王五在工作

// 调用静态方法
Person.print() //男
// 如果用console.log打印函数会多返回一个undefined
// console.log(Person.print()) //男 + undefined


// true、但ts会报错
// 【2】实例.__proto__ === 原型
// console.log(Person.prototype === p1.__proto__)

// console.log(Person.prototype.name) //undefined
// console.log(Person.prototype.age) //undefined
// console.log(Person.age) //不存在

// 只要没被实例调用，都是undefined在运动
// console.log(Person.prototype.run())

export {}